package com.jiyongjun.bms.base.common.core;

import java.io.Serializable;
import java.util.List;

/**
 * <h2>服务类公共接口</h2>
 * description:
 *
 * @author yongjun.ji
 * @since 1.0 2019/5/30
 */
public interface BaseService<E extends BaseEntity, Q extends BaseQueryModel, K extends Serializable> {

    /**
     * 根据id查询单个实体
     *
     * @param id 主键
     * @return 单个实体
     */
    E getById(K id);


    List<E> getByCondition(Q queryModel);

    /**
     * 新增
     *
     * @param entity 实体类
     * @return 新增的实体，包含自动生成的id
     */
    E insert(E entity);

    /**
     * 全量更新
     *
     * @param entity 实体类
     * @return 影响行数
     */
    Integer update(E entity);

    /**
     * 部分更新：只更新不会null的属性
     *
     * @param entity 实体类
     * @return 影响行数
     */
    Integer patchUpdate(E entity);

    /**
     * 物理删除
     *
     * @param id 主键
     * @return 影响行数
     */
    Integer delete(K id);

    /**
     * 逻辑删除
     *
     * @param id 主键
     * @return 删除行数
     */
    Integer deleteLogically(K id);
}
